// Map也是ES6推出用于存储数据的一种类，底层采用散列的方式来实现。
// 实际上，对象在JS中也是一种散列的数据结构。
// 所以开发中Map使用得不太多

// Map和对象一样，采用key-value（键值对）的方式来存储数据
// 在键上设置对应的值，通过键去访问存储的值，也可以通过键去删除对应存储的值。

// 创建Map对象，采用构造方法
let map = new Map();

// set(key,value)方法：存储键值对，返回当前map对象的引用
let r = map.set("name","奉先");
console.log("r =",r);

// 链式调用
map.set("age",35).set("sex","男");
console.log("map =",map);

// 细节：
// 如果再相同的键上，再次存储数据，会替换掉原有的值
map.set("name","Hydra");
console.log("map =",map);

// null和undefined的键：可以使用
map.set(null,"没有");
map.set(undefined,"未定义");
console.log("map =",map);

// null和undefined的值：可以使用
map.set("没有",null);
map.set("未定义",undefined);
console.log("map =",map);

// key是否重复，严格遵守 === 比较的原则
// Map和对象的区别：对象的属性名只能是基本数据类（字符串），标识符，值可以使任意类型
// Map的键和值都可以是任意类型，但是通常我们键只使用字符串类型
let obj = {
    name: "Hydra",
    '1': "wo",
    'true': "OK",
    friend: {}
}

// Map甚至可以使用对象作为Key
map.set(obj,"人");
console.log("obj =",obj)
console.log("map =",map);
